home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Software Vault: The Gold Collection
/
Software Vault - The Gold Collection (American Databankers) (1993).ISO
/
cdr26
/
netprog.zip
/
NETPROG.TAR
/
ping
/
sigalarm.c
< prev
next >
Wrap
C/C++ Source or Header
|
1989-12-17
|
1KB
|
52 lines
/*
* This routine causes another PING to be transmitted, and then
* schedules another SIGALRM for 1 second from now.
*
* Our sense of time will slowly skew (i.e., packets will not be launched
* exactly at 1-second intervals). This does not affect the quality
* of the delay and loss statistics.
*/
#include "defs.h"
sig_alarm()
{
int waittime;
send_ping(); /* first send another packet */
if (npackets == 0 || ntransmitted < npackets)
/*
* If we're not sending a fixed number of packets,
* or if we are sending a fixed number but we've still
* got more to send, schedule another signal for 1 second
* from now.
*/
alarm(1);
else {
/*
* We've sent the specified number of packets.
* But, we can't just terminate, as there is at least one
* packet still to be received (the one we sent at the
* beginning of this function).
* If we've received at least one packet already, then
* wait for 2 times the largest round-trip time we've seen
* so far. Otherwise we haven't received anything yet from
* the host we're pinging, so just wait 10 seconds.
*/
if (nreceived) {
waittime = 2 * tmax / 1000; /* tmax is millisec */
if (waittime == 0)
waittime = 1;
} else
waittime = MAXWAIT;
signal(SIGALRM, sig_finish); /* change the signal handler */
alarm(waittime); /* schedule the signal */
}
return;
}